package 泛型;

public class 泛型擦拭法 {

//    泛型是一种类似”模板代码“的技术，不同语言的泛型实现方式不一定相同。
//    Java语言的泛型实现方式是擦拭法（Type Erasure）。
//    所谓擦拭法是指，虚拟机对泛型其实一无所知，所有的工作都是编译器做的。

//    Java使用擦拭法实现泛型，导致了：
//    - 编译器把类型<T>视为Object；
//    - 编译器根据<T>实现安全的强制转型。

//    了解了Java泛型的实现方式——擦拭法，我们就知道了Java泛型的局限：
//
//    局限一：<T>不能是基本类型，例如int，因为实际类型是Object，Object类型无法持有基本类型：
//    局限二：无法取得带泛型的Class。观察以下代码：
//    局限三：无法判断带泛型的类型：
//    局限四：不能实例化T类型，要实例化T类型，我们必须借助额外的Class<T>参数：
//
//    Java的泛型是采用擦拭法实现的；
//
//    擦拭法决定了泛型<T>：
//
//    不能是基本类型，例如：int；
//    不能获取带泛型类型的Class，例如：Pair<String>.class；
//    不能判断带泛型类型的类型，例如：x instanceof Pair<String>；
//    不能实例化T类型，例如：new T()。
//    泛型方法要防止重复定义方法，例如：public boolean equals(T obj)；
//
//    子类可以获取父类的泛型类型<T>。

}
